home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / programming / arexx / rexxbgui / rexxbgui.doc < prev    next >
Text File  |  1999-06-14  |  19KB  |  534 lines

  1. rexxbgui.library version 1.1
  2. Date: April 23, 1999
  3. Copyright © Jilles Tjoelker 1999
  4.  
  5. New in V2.0:
  6. * Version number bumped because of new functions.
  7. * Added menus.
  8. * Added progress bar (suggested by Ingo ...) and indicator.
  9. * Bug fixed: bguiwindow() did not get the argument count correctly. This
  10.   caused problems, because ARexx does not clear extra argument slots but
  11.   instead leaves in them what values happen to be contained in them from
  12.   previous function calls.
  13.  
  14. New in V1.1:
  15. * New functions: bguiwinbusy(), bguiwinready(), bguipages(), bguimx(),
  16.   bguiactivategadget(), bguilist(), bguiaddcondit(), bguilistvaddentry(),
  17.   bguilistvcommand(), bguilistvreplacesel()
  18. * New argument for bgui[hv]group(), equal, to force equal width or height
  19.   of the objects in the group
  20. * New argument for bguiwindow(), pos, to open the window on another position
  21.   than centred on the screen
  22. * Some nonfunctional tags removed
  23. * New tags: BT_#?, PAGE_#?, MX_#?, TAG_IGNORE
  24. * Better documentation
  25. * Bug fixed: the library could be flushed from memory when a bguiopen() was
  26.   still outstanding.
  27. * A control-C break is now accepted immediately in bguiwinwaitevent() and
  28.   bguiwait() and passed to ARexx.
  29. * Bug fixed: BGUI 41.10 took the command name, which is always equal to "", for
  30.   the prefs filename. Fixed by temporarily setting the pr_Cli pointer to zero.
  31.  
  32. Look in the example scripts for more information.
  33. General ARexx limitation: functions can only have up to 15 arguments.
  34.  
  35. ESCAPE SEQUENCES
  36. Escape sequences can be used in most texts, including labels, frame titles
  37. info object contents and listview entries. Frame titles may have shadow.
  38. Listview entries and labels within objects can be text on background or
  39. filltext on fill; when you change the colours it cannot be restored.
  40. ESC='1b'x or just use the Esc key to put it in a string constant.
  41.  
  42. ESC||ESC no operation; used to separate sequences ending in a digit
  43.          from normal digits.
  44. ESC'u'   underlined on (do not use for indicating a hotkey)
  45. ESC'b'   bold on
  46. ESC'i'   italics on
  47. ESC'z'   underscore on (can indicate the hotkey for a gadget, only visual
  48.          though, use BT_Key to make it work)
  49. ESC'n'   normal text
  50. ESC'd'n  set DrawInfo pen #n (2=text, 3=shine, 4=shadow, 5=selected gadget
  51.          fill, 6=text on fill, 7=background, 8=important text)
  52. ESC'p'n  set colour #n
  53. ESC'D'n  set DrawInfo pen #n as background
  54. ESC'P'n  set colour #n as background
  55. ESC's'   shadow on (additionally use ESC'd3')
  56. ESC'-'ch turn something off (ch=u/b/i/s/z)
  57. ESC'c'   centre this and the following lines
  58. ESC'r'   right-justify this and the following lines
  59. ESC'l'   left-justify this and the following lines
  60. '0a'x    new line. This does not work for listview entries and frame titles.
  61.  
  62. FUNCTIONS
  63.  
  64. success=bguiopen([taskname],[noerrorifopenfail])
  65. This function opens bgui.library. Version 41 is required.
  66. taskname indicates the name of the prefs file, default "ARexx".
  67. Predefined are: ID.WIN(CLOSE|NOMORE|INACTIVE|ACTIVE).
  68. If this function has not yet been called, all functions starting with
  69. 'bgui' cause "Error return from function".
  70.  
  71. x=bguiwait()
  72. Wait for most events; Control-C is passed trough to ARexx
  73. (signal on break_c).
  74.  
  75. id=bguiwinevent(winobj,[destvar])
  76. This function does not wait for events.
  77.  
  78. id=bguiwaitwinevent(winobj,[destvar])
  79. This function is much more efficient than the bguiwinevent()/bguiwait()
  80. combination.
  81.  
  82. success=bguiwinopen(winobj)
  83. This function must be used to open a window. When a window object is created,
  84. it does not open automatically, unlike some other GUI engines' behaviour.
  85. This enables you to do things like bguiwintabcycleorder() in time.
  86.  
  87. x=bguiwinclose(winobj)
  88.  
  89. success=bguiwinbusy(winobj)
  90. Use this function to set a busy pointer and zero-size requester that blocks
  91. input on a window. It nests, i.e. the window will not be unblocked until
  92. one bguiwinready() has been done for each bguiwinbusy() executed.
  93.  
  94. success=bguiwinready(winobj)
  95.  
  96. obj=bguiwindow(title,mastergroup,[scalew],[scaleh],[refwin],[scrname],[pos],[menu])
  97. scale[wh]: 0% = minimum size, 100% = full screen
  98. Precede scalew and/or scaleh with a minus sign to lock the dimension.
  99. Locking both removes the size gadget.
  100. refwin: the new window object will open on the same screen as refwin
  101. pos 'S' centre on screen
  102.     'M' centre on mouse pointer
  103.     'T' top-left of the screen
  104.     'W' centre on window
  105.     'B' l t w h position in screen (pixel) coordinates
  106.     'R' l t w h centre window on this box
  107.     '*' (anywhere) do not activate window upon opening (doesn't really
  108.         fit here but this saves arguments)
  109. menu: concatenate bguimenu() results
  110.  
  111. info=bguilayout(tag,value,[tag],[value],...)
  112. Concatenate the return value of this to an object. It does not work for
  113. VarSpace members.
  114.  
  115. info=bguivarspace(weight)
  116. A weight controlled spacing in a group; 1<weight<1023
  117. bguilayout() cannot be used on this.
  118.  
  119. obj=bgui[hv]group(objects,[spacing],[offset],[title],[equal])
  120. Double use of objects or forgotten '||' is caught -> error 12.
  121. spacing/offset -1 narrow
  122.                -2 normal
  123.                -3 wide
  124. offset 'F' frame (required for a title)
  125. equal 'W' all objects the same width
  126.       'H' all objects the same height
  127.       'S' all objects the same width and height
  128.  
  129. obj=bguipages(name,objects)
  130. This function only creates OBJ.name, not ID.name.
  131. Do not set PAGE_Active values which are out of range!
  132. The usage of pages increases the number of objects that can be in a window
  133. and therefore object creation time. The BGUI prefs program is an example of
  134. this!
  135.  
  136. obj=bguibutton(name,label)
  137. As other "real" gadget creation functions, this one sets both ID.name
  138. (compare with bguiwinevent() or bguiwinwaitevent() result) and OBJ.name (for
  139. bguiget() and similar functions).
  140.  
  141. Prefix the keyboard shortcut with '_' in label. This also applies to other
  142. gadgets. Take care that all shortcuts are different! BGUI does not check
  143. this (MUI doesn't either). This type of bug is present in much software.
  144.  
  145. obj=bguitoggle(name,label,[state])
  146.  
  147. obj=bguicheckbox(name,[label],[state])
  148.  
  149. obj=bguiinfo(name,[label],contents)
  150. Non-clickable information object.
  151.  
  152. obj=bguistring(name,[label],[contents],maxchars)
  153.  
  154. obj=bguiinteger(name,[label],[contents],[maxchars],[min],[max])
  155. It is not guaranteed, that min<=bguiget(int,STRINGA_LongVal)<=max.
  156.  
  157. obj=bguilistview(name,[label],[stem],[type],[ncolumns])
  158. type 'R' read-only
  159.      'S' select (default)
  160.      'D' drag'n'drop
  161. In multi-column listview entries, the columns are separated by a tab
  162. character. Attributes set with escape sequences do not continue from
  163. one column to the next.
  164. Optionally, you can append column weights to ncolumns, e.g. '3 10 45 45' to
  165. create one small column and two wider ones.
  166.  
  167. obj=bguimx(name,[label],stem,[type])
  168. type 'R' radio buttons (default)
  169.      'T' tabs
  170.      'U' upside down tabs
  171.  
  172. obj=bguiprogress(name,[label],min,max,[format],[type])
  173. format: C-style format string for text in the gadget. Use %ld as a
  174. placeholder for the number. Other percent signs must be doubled. Other
  175. possibilities: "%03ld" forces a field size of three digits and pads on the
  176. left with zeroes. "%lD" formats the number according to the language selected
  177. and works only if locale.library is installed. "%lx" creates a hexadecimal
  178. format.
  179. BGUI 41.10 draws the text in the last colour used (if done=max then the
  180. progress bar colour else the background colour) because of a bug, therefore
  181. the format string should begin with ESC'd2'ESC||ESC (not necessarily 2).
  182. ESC'D'n is also recommended if the text should be always visible on two
  183. colour screens or screens with strange pens (e.g. non-newlook (no 3D look)).
  184. If you don't want the problems of a format string, then you can use
  185. bguiaddmap() to put the number in an indicator next to the progress bar.
  186. type 'H' horizontal
  187.      'V' vertical
  188. The amount done is set to zero or the minimum.
  189.  
  190. obj=bguiindicator(name,[label],min,max,[level],[justify],[format])
  191. Textual level indication gadget.
  192. justify 'L' left (default)
  193.         'C' centre
  194.         'R' right
  195. format: the same thing as in bguiprogress() except that setting colours is
  196. not necessary and that it has a default "%ld".
  197.  
  198. res=bguiget(obj,attr)
  199. Error descriptions here:
  200. "Invalid keyword" if you supplied an attribute that RexxBGUI does not know -
  201. see "tags" further on in this file for which attributes are available.
  202. "Error return from function" if the obj parameter was not OK or if the
  203. object did not understand the attribute, for example an attribute of another
  204. gadget class or one that is not gettable;
  205. "Wrong number of arguments" if rm->rm_Action & 0xF is not 2 or if
  206. rm_Args[1] or rm_Args[2] is equal to zero.
  207.  
  208. x=bguiset(obj,[refwin],tag,value,[tag],[value],...)
  209. refwin: window object in which the gadget is located; necessary if you want
  210. visual updating. Specifying another window causes strange results...
  211. If you need to set more than 6 tags, split it out over multiple calls and
  212. omit refwin in all possibly except the last. Put at least one attribute
  213. causing visual update in the last call, if you want any update.
  214.  
  215. gad=bguireq(text,gadgets,[title],[refwin],[scrname])
  216. RequestChoice/rtEZRequest() like requester. Use '|' to separate the gadgets.
  217. An asterisk adds return as a shortcut for the button it stands before and
  218. escape for the last one. Underscores can be used to prefix keyboard shortcuts.
  219. The window specified by refwin will automatically get a busypointer.
  220. Title defaults to refwin's title, or "BGUI Request" or its localized
  221. equivalent if wndobj is not given.
  222. Scrname does not work.
  223. gad: 1 for the first, 2 for the second, etc. and 0 for the last gadget.
  224.  
  225. success=bguiaddmap(srcobj,dstobj,sattr,dattr)
  226. This function connects two objects so srcobj will update dstobj's dattr
  227. when its sattr changes. This happens even without bguiwinevent().
  228.  
  229. Example usages:
  230. Listview with connected string gadget:
  231. call bguiaddmap(obj.listv,obj.str,LISTV_Entry,STRINGA_TextVal)
  232. Listview to select a page (#of listview entries must be #of pages!!!):
  233. call bguiaddmap(obj.listv,obj.pages,LISTV_EntryNumber,PAGE_Active)
  234.  
  235. The number of attributes that can cause notification (sattr) or be updated
  236. (dattr) is more limited than the number that can be used with bguiget() or
  237. bguiset(). If notification does not work, you'll have to fall back to the
  238. latter mechanism.
  239.  
  240. There is no "initial" notification.
  241.  
  242. Notification of LGO attributes may cause a crash. Using bguiset() is safer.
  243.  
  244. success=bguiaddcondit(srcobj,dstobj,iftag,ifval,thtag,thval,eltag,elval)
  245. This function connects two objects so srcobj will update dstobj depending
  246. on its ifattr. This is more or less equivalent to doing this when srcobj's
  247. iftag changes:
  248. IF bguiget(srcobj,iftag)=ifval THEN CALL bguiset(dstobj,thtag,thval),
  249.   ELSE CALL bguiset(dstobj,eltag,elval)
  250. This happens even without bguiwinevent(). See also bguiaddmap().
  251.  
  252. Integer tags only.
  253.  
  254. Always test boolean tags for 0 and never for 1.
  255.  
  256. Example usage:
  257. Yes/No setting that makes a choice impossible:
  258. call bguiaddcondit(obj.check,obj.mx,GA_Selected,0,MX_EnableButton,0,
  259. ,MX_DisableButton,0)
  260.  
  261. MX_DisableButton,n will never change MX_Active. You have to check separately
  262. if the selection is still possible.
  263.  
  264. If you init the checkbox to on, the first MX button will not be enabled
  265. initially. If you init the checkbox to off and set it to on after this call,
  266. it will be OK.
  267.  
  268. count=bguilistvgetentries(listvobj,stemname,[type])
  269. type 'A' all
  270.      'S' selected only
  271.  
  272. success=bguilistvaddentry(listvobj,[refwin],entry,[where],[flags])
  273. where 'H' head
  274.       'T' tail
  275.       'S' sorted
  276.       number add before entry n
  277. flags 'S' select
  278.       'M' multiselect
  279.       '+' make visible by scrolling list if necessary
  280.       '-' do not make visible
  281. 'S' or 'M' makes visible automatically unless disabled with '-'
  282.  
  283. rc=bguilistvcommand(listvobj,[refwin],command)
  284. command 'clear' delete all entries
  285.         'refresh' refresh listview and scroller
  286.         'sort'
  287.         'redraw' redraw all entries only
  288.         'remselected' single-select only; also selects new entry
  289.  
  290. success=bguilistvreplacesel(listvobj,[refwin],new)
  291. Use this function to replace the first selected entry of a listview by another.
  292. If no entry is selected, a new one is added and selected.
  293.  
  294. success=bguiwintabcycleorder(winobj,objects)
  295. RexxBGUI can only check the validity of the objects array to a limited
  296. extent: if a multiple of four spaces is intermixed wrong object pointers
  297. are used and a crash can be expected if tab is pressed in the first gadget.
  298.  
  299. nm=bguimenu(type,[label],[commkey],[flags],[mutualexclude],[id])
  300. Creates a NewMenu structure. Concatenate some of these and pass the result
  301. to bguiwindow(). If IDs (bguiwinevent()) are to be shared between gadgets
  302. and menuitems, create the gadgets first. Do not give a checkbox and a
  303. CHECKIT|TOGGLE item the same ID as it will be impossible to distinguish
  304.  
  305. type '1' menu title
  306.      '2' item
  307.      '3' subitem
  308. Omitting label gives a separator bar (automatically disabled).
  309. commkey: RAmiga-... shortcut
  310. flags 'DISABLED'
  311.       'CHECKIT' can be checked (not unchecked)
  312.       'CHECKED' has checkmark
  313.       'TOGGLE' specify CHECKIT too
  314. mutualexclude: selecting this CHECKIT item deselects these items
  315.                (bit #x means item #x)
  316. id: may be either a number or a name of a variable
  317.     number: selecting the item generates this ID
  318.     variable: generate a new ID and store it in the variable
  319.     Therefore you can write bguimenu(...,id.quit) and it will
  320.     automatically share its ID with a gadget's, if it is present.
  321.  
  322. Example:
  323. menu=bguimenu(1,'Project')||,
  324.       bguimenu(2,'About...','?',,,id.about)||,
  325.       bguimenu(2)||,
  326.       bguimenu(2,'Quit','Q',,,id.quit)||,
  327.      bguimenu(1,'Testing')||,
  328.       bguimenu(2,'Have your cake',,'CHECKIT CHECKED','10'b,id.hyc)||,
  329.       bguimenu(2,'Eat it too',,'CHECKIT','01'b,id.eit)||,
  330.       bguimenu(2,'On or off???',,'CHECKIT TOGGLE',,id.ooo)||,
  331.       bguimenu(2)||,
  332.       bguimenu(2,'Subitems')||,
  333.        bguimenu(3,'Subitem #1','1',,,id.sub1)||,
  334.        bguimenu(3,'Subitem #2','2',,,id.sub2)||,
  335.        bguimenu(3,'Subitem #3','3','DISABLED',,id.sub3)
  336.  
  337. success=bguiwindisablemenu(winobj,id,state)
  338.  
  339. success=bguiwincheckitem(winobj,id,state)
  340.  
  341. rc=bguiwinmenudisabled(winobj,id)
  342. rc 1 disabled
  343.    0 enabled
  344.    -1 unknown menu/no menus at all attached to window
  345.  
  346. rc=bguiwinitemchecked(winobj,id)
  347. rc 1 checked
  348.    0 not checked
  349.    -1 unknown menu/no menus at all attached to window
  350.  
  351. success=bguiactivategadget(gadget,refwin)
  352. This call may fail, although that's usually not a severe problem...
  353. RexxBGUI can only check the validity of the objects to a limited extent.
  354.  
  355. x=bguiclose()
  356. This MUST be called before exiting the script.
  357.  
  358. success=bguireadentries(filename,stemname)
  359. When using READLN(), EOF cannot be distinguished from an empty line.
  360. Therefore this function is present. It reads lines from a file to a stem
  361. in a format suitable for the listview gadget.
  362.  
  363. stemname=bguilist(stemname,entry0,[entry1],...)
  364. This function allows you to place small lists (<=14 entries) for listviews
  365. directly in the gadget creation function, a bit like in E [e0,e1,...].
  366. It sets stemname.COUNT and stemname.x (0<=x<stemname.COUNT)
  367.  
  368. Example:
  369. ...
  370. bguilistview('switcher',,bguilist('pnames','Single-Select','Multi-Select'))||,
  371. ...
  372. drop pnames. /* not really necessary */
  373.  
  374. x=bguierror(code)
  375. This function causes an ARexx error, e.g. bguierror(12) causes "Error return
  376. from function".
  377.  
  378. TAGS: General information
  379. Types:
  380. INT=integer, may be boolean (0 means false, anything else means true)
  381. STRING=string
  382. OBJECT=4-byte pointer
  383.  
  384. Applicability: ISGNU
  385. I=Init (not applicable for RexxBGUI)
  386. S=Set (bguiset())
  387. G=Get (bguiget())
  388. N=Notify (bguiaddmap() sattr/bguiaddcondit() ifattr)
  389. U=Update (bguiaddmap() dattr/bguiaddcondit() thattr/elattr)
  390. -=not possible
  391. ?=not known to me, try it
  392.  
  393. WINDOW_#? TAGS
  394.  
  395. WINDOW_Window                 OBJECT --G--
  396.  
  397. INFO_#? TAGS
  398.  
  399. INFO_TextFormat               STRING IS--U
  400. INFO_MinLines                 INT
  401. INFO_FixTextWidth             INT
  402.  
  403. STRINGA_#? TAGS
  404.  
  405. STRINGA_TextVal               STRING ISGNU makes string gadget
  406. STRINGA_LongVal               INT    ISGNU makes integer gadget
  407. STRINGA_MaxChars              INT    I-?--
  408. STRINGA_BufferPos             INT    IS??? cursor position
  409. STRINGA_DispPos               INT    IS??? first char visible
  410.  
  411. LGO_#? TAGS
  412.  
  413. LGO_FixWidth                  INT
  414. LGO_FixHeight                 INT
  415. LGO_Weight                    INT
  416. LGO_FixMinWidth               INT
  417. LGO_FixMinHeight              INT
  418. LGO_Align                     INT
  419. LGO_NoAlign                   INT
  420. LGO_FixAspect                 INT    65536*x+y 41.8 only
  421. LGO_Visible                   INT
  422.  
  423. LISTV_#? TAGS
  424.  
  425. LISTV_Top                     INT    ISG-U
  426. LISTV_ReadOnly                INT    ISG?? S/U will not change frame
  427. LISTV_MultiSelect             INT    IS?-U
  428. LISTV_Select                  INT    -S--U
  429. LISTV_MakeVisible             INT    -S--U
  430. LISTV_Entry                   STRING ---N-
  431. LISTV_EntryNumber             INT    ---N-
  432. LISTV_LastClicked             STRING --G--
  433. LISTV_LastClickedNum          INT    --G--
  434. LISTV_NewPosition             INT    ---N-
  435. LISTV_NumEntries              INT    --G--
  436. LISTV_MinEntriesShown         INT    ISG??
  437. LISTV_SelectMulti             INT    -S--U
  438. LISTV_SelectNotVisible        INT    -S--U
  439. LISTV_SelectMultiNotVisible   INT    -S--U
  440. LISTV_MultiSelectNoShift      INT    IS--U
  441. LISTV_Deselect                INT    -S--U
  442. LISTV_DropSpot                INT    --G--
  443. LISTV_ShowDropSpot            INT    IS---
  444. LISTV_Columns                 INT    I-G--
  445. LISTV_DragColumns             INT    ISG-U
  446. LISTV_Titles                  STRING I-G-U 41.8 Enforcer hits
  447. LISTV_Titles!                 OBJECT ISG-U static string problem
  448. LISTV_PreClear                INT    ISG--
  449. LISTV_LastColumn              INT    --G--
  450.  
  451. GA_#? TAGS
  452.  
  453. GA_Disabled                   INT    IS?-U
  454. GA_Selected                   INT    ISGNU toggles/checkboxes only
  455.  
  456. BT_#? TAGS
  457.  
  458. BT_LabelClick                 INT    IS---
  459. BT_DragObject                 INT    ISG--
  460. BT_DropObject                 INT    ISG--
  461. BT_Key                        STRING ISG-- set after creating window object only
  462. BT_RawKey                     INT    ISG-- set after creating window object only
  463. BT_Qualifier                  INT    ISG-- set after creating window object only
  464.  
  465. PAGE_#? TAGS
  466.  
  467. PAGE_Active                   INT    ISG?U
  468.  
  469. MX_#? TAGS
  470.  
  471. MX_Active                     INT    ISGNU
  472. MX_DisableButton              INT    IS--U
  473. MX_EnableButton               INT    IS--U
  474.  
  475. PROGRESS_#? TAGS
  476.  
  477. PROGRESS_Min                  INT    IS---
  478. PROGRESS_Max                  INT    IS---
  479. PROGRESS_Done                 INT    ISGNU
  480.  
  481. INDIC_#? TAGS
  482.  
  483. INDIC_Level                   INT    IS--U
  484.  
  485. TAG_#? TAGS
  486.  
  487. TAG_IGNORE                    INT    IS--U does nothing!
  488.